<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/4/8 0008
 * Time: 21:26
 */
//字符集转换
//PHP 5在两个扩展中支持字符编码与多字节问题：iconv和mbstring。两者之间主要的区 别是iconv使用的是一个外部的库（
//如果可以，或者使用C库中的函数），而mbstring扩展使 用的是PHP绑定的库。因为iconv （至少在最新的Linux版本中）
//
//支持更多的编码，所以iconv 可能是通用化脚本更好的选择。除了字符编码的转换，mbstring扩展还包含一个多字节的正则
//表达式库。mbstring扩展是通过--enable-mbstring选项启用的。当mbstring被启用时附加 的正则表达式支持是默认开启的，
//但是它也能通过--disablembregex选项关闭。iconv扩展是 通过-.-with-iconv开关启用的。在图9.13和图9.14中，
//你可以看到mbstring和iconv在 phpinfoU中相应的部分。
//如果可能的话，下面的例子同时包含了这两个扩展，而且除非额外注 明，脚本例子中使用的字符集和输出使用ISO-8859-15。

//$string = "Kan De vœe så vennlig hjelpe meg?\n\n";
//echo "ISO-8859-15" . $string;
//
//echo 'utf-8' . mb_convert_encoding($string,'UTF-8','ISO-8859-15').PHP_EOL;
//echo 'utf-8' . iconv('ISO-8859-15','UTF-8',$string);

//有时候 不能讲文本从一个编码转化为另一个编码
error_reporting(E_ALL & ~E_NOTICE);

$from = 'ISO-8859-1';//西欧
$to = 'ISO-8859-2'; //中部和东欧
$string = 'vœe så';

//echo mb_convert_encoding($string, $to, $from) . PHP_EOL;
//echo iconv($from, $to, $string) . PHP_EOL;
//echo iconv($from, "$to//TRANSLIT", $string) . PHP_EOL;

//mb_convert_encoding()处理会把无法表示的字符(默认情况下) 用一个“？ ”字符代替，然而iconv()只是会在那个地方退出转换。但是，
//你可以增加//TRANSLIT 修饰符到to编码参数中来告诉iconv(}把无法表示的字符换为“？”。//TRANSLIT还尝试着把 字符转换为一个类似的字符，
////例如当从ISO-8859-1转换到ISO-8859-2时把“©”转换为“(C)”。
//// 你可以使用mb_substitute_character ()函数来告诉mbstring扩展对一个无法表示的字符做 不同的操作，

//不输出特殊字符
//mb_substitute_character('none');
//echo mb_convert_encoding($string, $to, $from) . PHP_EOL;
////特殊字符的unicode输出
//mb_substitute_character('long');
//echo mb_convert_encoding($string, $to, $from) . PHP_EOL;

//mbsrting 还具备一个非编码的html转换功能

$from = 'ISO-8859-1';//西欧
$to = 'html'; //中部和东欧
$string = 'Esto texto es Español.';
//echo mb_convert_encoding($string, $to, $from) . PHP_EOL;
//mb_convert_encoding ()函数的第三个参数是可选的而且默认值是你可以通过函数 mb_internal_encoding()设置的“内部编码”。如果设置了一个参数，
//该函数会在编码支持时 返回TRUE，而在编码不支持时返回FALSE和一个警告。如果没有参数被传递，函数只是简单地 返回当前的设置：
//echo mb_internal_encoding();//UTF-8
//if (mb_internal_encoding('UTF-8')) {
//    echo mb_internal_encoding();
//}
//if (@mb_internal_encoding('ISO-8859-17')) {
//    echo mb_internal_encoding();
//}

//你可以通过使用函数mb_get_encodings ()查看一个被支持的编码的列表。
//var_dump(mb_get_info());
//array(14) {
//    'internal_encoding' =>
//  string(5) "UTF-8"
//  'http_output' =>
//  string(5) "UTF-8"
//  'http_output_conv_mimetypes' =>
//  string(31) "^(text/|application/xhtml\+xml)"
//  'func_overload' =>
//  int(0)
//  'func_overload_list' =>
//  string(11) "no overload"
//  'mail_charset' =>
//  string(5) "UTF-8"
//  'mail_header_encoding' =>
//  string(6) "BASE64"
//  'mail_body_encoding' =>
//  string(6) "BASE64"
//  'illegal_chars' =>
//  int(0)
//  'encoding_translation' =>
//  string(3) "Off"
//  'language' =>
//  string(7) "neutral"
//  'detect_order' =>
//  array(2) {
//        [0] =>
//    string(5) "ASCII"
//        [1] =>
//    string(5) "UTF-8"
//  }
//  'substitute_character' =>
//  int(63)
//  'strict_detection' =>
//  string(3) "Off"
//}
//conv扩展拥有类似的功能。函数iconv_set_encoding ()可以被用来设置内部编码和输出 编码：
//iconv_set_encoding('internal_encoding','ISO-8859-1');  //deprecated 不赞成的
//iconv_set_encoding('output_encoding','UTF-8');
//echo iconv_get_encoding('internal_encoding').PHP_EOL;
//echo iconv_get_encoding('output_encoding');


setlocale(LC_COLLATE,'C');
//strcoll()
//    该函数与 strncmp() 函数类似，不同的是，通过 strncmp() 您可以指定每个字符串用于比较的字符数。
//echo strcmp("Hello world!","Hello world!");
//echo strncmp("I love China!","I love Shanghai!",6);
setlocale(LC_TIME,'en_US');
echo strftime("%c").PHP_EOL;
setlocale(LC_TIME,'nl_NL');
echo strftime("%c").PHP_EOL;
setlocale(LC_TIME,'no_NO');
echo strftime("%c").PHP_EOL;

//总结
//Summary
//本章讨论了 PHP中高级编程时经常需要的各种特性。提供了关于处理流	个PHP特
//性——和其他特性的信息，例如正则表达式、日期和时间函数，以及字符集之间的转换——所 有PHP扩展提供的特性。
//从PHP4.3.0开始，你就可以和文件、进程、程序或者使用流与网络进行交互。可以使用打 开、读取、写入、拷贝、重命名和其他方法来处
//理本地和远程的文件，包括压缩文件，而且可 以使用PHP处理流的函数将管道信息输入或者输出到进程和程序中。你可以使用许多流函数，
//例如f open (),它打开一个文件或者URL以便读取和/或者写入数据，
//还有proc_open ()，它 通过执行一项命令启动一个进程并且建立一个通向进程的管道以便让你可以用它来发送和获取 进程信息。
//正则表达式可以让你创建正则式，然后你可以用它去匹配文本。正则表达式是流程控制和 验证用户输入时测试文本的强大机制。
//Perl正则表达式，通过PCRE扩展提供而且是默认开启的， 包含一个特殊字符的字符串和匹配文本的文本显示的概要的正则式，
//例如［0-9］匹配任何0到9 之间的字符。PHP提供几个扩展来使用正则表达式，例如preg_matCh()可以匹配一个字符串和 正则式并且返回一个
//包含匹配字符串的数组，而preg_replaCe()用另一个指定的字符串替换掉 匹配一个正则式的字符串。
//其他PHP提供的重要的函数允许专门处理日期和时间、图片的创建和将文本从一个字符集 转换到另外一个。日期和时间函数可以让你存
//储任何日期，包括now,并且用许多方法格式化日 期，考虑环境和夏令时(DST)。GD扩展(默认不开启)有许多可以让你创建图片、包含带有
//文本和柱状图的颜色图片的函数。iconv和mbstring扩展提供函数让你可以从一个字符集转换 为另一个，例如把一个文本字符串从ISO-88
//59-15 (Latin 9)转换到UTF-8。环境是定义不同的 语言而且/或者地区如何显示文本、日期、时间和货币。你可以使用PHP函数setloc
//aleU来切 换环境和针对不同环境类型选择不同的环境。
